package com.sgb.kjwl.api.service;

import com.sgb.kjwl.model.entity.AddLayoutEntity;
import com.sgb.kjwl.model.entity.AlbumEntity;
import com.swgk.core.view.entity.AliProofEntity;
import com.sgb.kjwl.model.entity.ArrEntity;
import com.sgb.kjwl.model.entity.HomeSearchCompanyEntity;
import com.sgb.kjwl.model.entity.ProListEntity;
import com.sgb.kjwl.model.entity.STArrEntity;
import com.sgb.kjwl.model.entity.STPublishEntity;
import com.sgb.kjwl.model.entity.StoreEntity;
import com.sgb.kjwl.model.entity.business.StorageManEntity;
import com.sgb.kjwl.model.entity.businessmanagement.GoodsIndexMemberEntity;
import com.sgb.kjwl.model.entity.businessmanagement.MemberEntity;
import com.sgb.kjwl.model.entity.pricecheck.AttributeViewEntity;
import com.sgb.kjwl.model.entity.pricecheck.CommonStAttrEntity;
import com.sgb.kjwl.model.entity.self.GoodsListEntity3;
import com.sgb.kjwl.model.entity.supplier3.DictEntity3;
import com.sgb.kjwl.model.entity.transport.MapLongAndLatEntity;
import com.sgb.kjwl.model.entity.user.GetSkuEntity1;
import com.sgb.kjwl.model.entity.user.GoodsListEntity;
import com.sgb.kjwl.model.entity.user.UnitEntity;
import com.sgb.link.entity.BrandEntity;
import com.swgk.core.base.model.entity.BaseEntity;
import com.swgk.core.base.model.entity.ListResponse;
import com.swgk.core.view.entity.GoodsPublishEntity;
import com.swgk.core.view.entity.GoodsServicesEntity;
import com.swgk.core.view.entity.MenuEntity;

import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.HTTP;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * @author cyj
 * 商品发布相关API
 */
public interface GoodsReleasedAPI {

    /**
     * 仓储列表
     * 我的-商品经营-仓储管理、商品发布
     *
     * @param pageNum
     * @param pageSize
     * @param storageName 根据查询仓储名称查询
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/management/shop/getStorageList")
    Call<BaseEntity<ProListEntity<List<StorageManEntity>>>> getStorageList(
            @Field("pageNum") int pageNum,
            @Field("pageSize") int pageSize,
            @Field("text") String storageName);

    /**
     * 删除仓储信息
     * 我的-商品经营-仓储管理
     *
     * @param id 仓储信息id
     * @return
     */
    @HTTP(method = "DELETE", path = "v1/app/management/shop/deleteStorage/{id}", hasBody = true)
    Call<BaseEntity<Object>> deleteStorage(@Path("id") String id);

    /**
     * 保存或修改仓储信息
     * 我的-商品经营-仓储管理
     *
     * @param entity 仓储信息对象
     * @return
     */
    @POST("v1/app/management/shop/saveStorage")
    Call<BaseEntity<Object>> saveStorage(@Body StorageManEntity entity);

    /**
     * 商品发布，查询材料常规属性
     *
     * @param id id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/getSupplierGetParamVal")
    Call<BaseEntity<List<ArrEntity>>> getSupplierGetParamVal(@Field("id") String id);


    /**
     * 材料筛选-材质规格
     *
     * @return
     */
    // -- 不确定 ----------------------------------------------------------------------------------
    @FormUrlEncoded
    @POST("v1/app/material/buyer/materChoose")
    Call<BaseEntity<List<ArrEntity>>> materChoose(@Field("id") String id);

    /**
     * 查询商品的一级分类
     *
     * @return
     */
    // -- 不确定 ----------------------------------------------------------------------------------
    @FormUrlEncoded
    @POST("v1/app/material/firstCategory")
    Call<BaseEntity<List<ArrEntity>>> firstCategory(@Field("areaCode") String areaCode);

    /**
     * 商品发布，根据商品分类 获取分类 sku
     *
     * @param id id 三级分类id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/getSku")
    Call<BaseEntity<List<GetSkuEntity1>>> getSku(@Field("id") long id);

    /**
     * 供应商 根据分类id 获取商品品牌
     *
     * @param id
     * @param text 品牌名称
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/brandList")
    Call<BaseEntity<List<BrandEntity>>> brandList(@Field("cid") String id, @Field("text") String text);

    /**
     * 商品分类列表
     *
     * @return
     */
    @GET("v1/app/material/buyer/goodsCategory")
    Call<BaseEntity<List<MenuEntity<MenuEntity<MenuEntity>>>>> materialGoodsCategory(@Query("areaCode") String areaCode);

    /**
     * 商品分类
     *
     * @return
     */
    @POST("v1/app/user/goods/goodsCategory")
    Call<BaseEntity<List<MenuEntity<MenuEntity<MenuEntity>>>>> goodsCategory();

    /**
     * 商品服务属性
     *
     * @return
     */
    @GET("api/itemServer/supplierGetServerAndVal/{cid}")
    Call<BaseEntity<List<GoodsServicesEntity>>> goodsService(@Path("cid") String cid);

    /**
     * 商品状态分类
     *
     * @return
     */
    @GET("v1/app/user/goods/goodsStatusCategory")
    Call<BaseEntity<List<DictEntity3>>> goodsStatusCategory();

    /**
     * 用户中心获取商品和商砼列表
     *
     * @param map
     * @return
     */
    @POST("v1/app/user/goods/myGoodsList")
    Call<BaseEntity<ListResponse<List<GoodsListEntity3>>>> myGoodsList(@Body Map map);

    /**
     * 商品单位列表
     *
     * @param text
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/unitList")
    Call<BaseEntity<List<UnitEntity>>> unitList(@Field("text") String text);

    /**
     * 发布商品
     *
     * @param goodsPublishEntity
     * @return
     */
    @POST("v1/app/user/goods/goodsPublish")
    Call<BaseEntity<Object>> goodsPublish(@Body GoodsPublishEntity goodsPublishEntity);

    /**
     * 商品上架-下架
     *
     * @return
     */
    @POST("v1/app/user/goods/upDown")
    Call<BaseEntity<Object>> upDown(@Body Map map);

    /**
     * 商品报价-批量改价-3
     *
     * @param map
     * @return
     */
    @POST("v1/app/user/goods/updatePrice")
    Call<BaseEntity<Object>> modifyGoodsPrice(@Body Map map);

    /**
     * 商品详情-改价-3
     *
     * @param id
     * @param price
     * @return
     */
    @POST("v1/app/user/products/modifyPrice")
    Call<BaseEntity<Object>> modifyGoodsDetailPrice(@Query("id") String id, @Query("price") String price);

    /**
     * 属性列表  /v1/app/material/buyer/getSupplierGetParamVal  v1/app/material/buyer/materChoose
     *
     * @param id
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/getSupplierGetParamVal")
    Call<BaseEntity<List<ArrEntity>>> getMaterChoose(@Field("id") String id, @Field("areaCode") String areaCode);

    /**
     * 获取视频参数
     *
     * @return
     */
    @POST("v1/app/common/getVideoParams")
    Call<BaseEntity<AliProofEntity>> getVideoParams();

    /**
     * 获取商砼强度和外加剂
     *
     * @return
     */
    @POST("v1/app/user/goods/concreteAttrs")
    Call<BaseEntity<List<STArrEntity>>> concreteAttrs();

    @POST("v1/app/user/goods/concreteAttrs")
    Call<BaseEntity<List<CommonStAttrEntity>>> getStAttribute();

    @GET("v1/app/material/buyer/materChoose")
    Call<BaseEntity<List<AttributeViewEntity>>> getAttribute(@Query("id") String id);

    /**
     * 商砼发布
     *
     * @param stPublishEntity
     * @return
     */
    @POST("v1/app/user/goods/concretePublish")
    Call<BaseEntity> concretePublish(@Body STPublishEntity stPublishEntity);

    /**
     * 编辑品发布-获取商砼详情
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/concretePublishDetail")
    Call<BaseEntity<STPublishEntity>> concretePublishDetail(@Field("id") String id);

    /**
     * 网络相册列表
     *
     * @param cid
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/getSupplierAlbumByCName")
    Call<BaseEntity<List<AlbumEntity>>> getSupplierAlbumByCName(@Field("cid") String cid);

    /**
     * 获取其他信息
     *
     * @param catId
     * @return
     */
    @GET("v1/app/user/goods/customizeTitle/getTitleColumnsByCatId")
    Call<BaseEntity<List<AddLayoutEntity<List<AddLayoutEntity>>>>> getAddLayout(@Query("catId") String catId);

    /**
     * 编辑时候获取商品其他信息
     *
     * @param itemId
     * @return
     */
    @GET("v1/app/user/goods/customizeTitle/getTitleColumnsByItemId")
    Call<BaseEntity<List<AddLayoutEntity<List<AddLayoutEntity>>>>> getGoodsOtherInfo(@Query("itemId") String itemId);

    /**
     * 编辑时候获取商砼其他信息
     *
     * @param concreteId
     * @return
     */
    @GET("v1/app/user/goods/customizeTitle/getTitleColumnsByConcreteId")
    Call<BaseEntity<List<AddLayoutEntity<List<AddLayoutEntity>>>>> getStOtherInfo(@Query("concreteId") String concreteId);

    /**
     * 获取地址经纬度
     *
     * @param areaCode
     * @param provinceNo
     * @param cityNo
     * @param districtNo
     * @return
     */
    @POST("v1/app/logistics/getAddressCoordinate")
    Call<BaseEntity<MapLongAndLatEntity>> getLocationLL(@Query("areaCode") String areaCode, @Query("provinceNo") String provinceNo, @Query("cityNo") String cityNo, @Query("districtNo") String districtNo);

    /**
     * 品牌保存
     *
     * @param map
     * @return
     */
    @POST("v1/app/management/shop/saveBrand")
    Call<BaseEntity<Object>> saveBrand(@Body Map map);

    /**
     * 删除品牌
     *
     * @param id
     * @return
     */
    @HTTP(method = "DELETE", path = "v1/app/management/shop/deleteBrand/{id}", hasBody = true)
    Call<BaseEntity<Object>> deleteBrand(@Path("id") String id);

    /**
     * 编辑品发布-获取商品详情
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/goodsPublishDetail")
    Call<BaseEntity<GoodsPublishEntity>> getNewGoodsById(@Field("id") String id);

    /**
     * 企业专项获取成员和会员
     * 1成员单位 2会员单位 3获取全部
     */
    @GET("v1/app/material/member")
    Call<BaseEntity<MemberEntity>> getMember(@Query("type") String type);


    /**
     * 编辑时候获取商品其他信息
     *
     * @param companyId
     * @return
     */
    @GET("v1/app/material/supplier/getSupplierPhone")
    Call<BaseEntity<String>> getSupplierPhone(@Query("companyId") String companyId);

    /**
     * V1.4.6 首页搜索获取供应商推荐
     *
     * @param map
     * @return
     */
    @GET("v2/app/index/getSupplierRecommendation")
    Call<BaseEntity<ProListEntity<List<HomeSearchCompanyEntity>>>> getSupplierRecommendation(@QueryMap Map<String, Object> map);

    /**
     * V1.4.6 首页搜索商品
     *
     * @param map
     * @return
     */
    @GET("v2/app/index/searchByKeywordGoods")
    Call<BaseEntity<ProListEntity<List<GoodsListEntity>>>> searchByKeywordGoods(@QueryMap Map<String, Object> map);

    /**
     * V1.4.6 首页搜索企业
     *
     * @param map
     * @return
     */
    @GET("v2/app/index/searchByKeywordStore")
    Call<BaseEntity<ProListEntity<List<StoreEntity>>>> searchByKeywordStore(@QueryMap Map<String, Object> map);


    /**
     * 企业专项获取成员和会员
     * 1成员单位 2会员单位 3获取全部
     */
    @GET("v1/app/material/member")
    Call<BaseEntity<GoodsIndexMemberEntity>> getMemberIndex(@Query("type") String type);

    /**
     * 商品首页获取-推荐
     *
     * @param map
     * @return
     */
    @GET("v2/app/index/getSupplierRecommendation")
    Call<BaseEntity<ProListEntity<List<GoodsIndexMemberEntity>>>> getIndexSupplierRecommendation(@QueryMap Map<String, Object> map);

    /**
     * 商品首页获取-关注
     *
     * @param map
     * @return
     */
    @GET("v1/app/userFocus/getCompanyFocus")
    Call<BaseEntity<ProListEntity<List<GoodsIndexMemberEntity>>>> getCompanyFocus(@QueryMap Map<String, Object> map);

    /**
     * 获取商品ImAccount
     *
     * @return
     */
    @GET("getImAccount")
    Call<BaseEntity<String>> getImAccount(@Query("no") String no, @Query("type") int type);
}
